﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CICM.RecruitmentProfiler.Services.InitDatas
{
    public static class InitSetupsDatas
    {
        /// <summary>
        /// Initialise le référentiel
        /// </summary>
        public static void InitReferentiel()
        {
            AddInitPays();
            AddInitFormesJuridiques();
            AddInitRoles();
            AddInitEntreprises();
        }

        public static void InitVideDatabase()
        {
            CleardDatabase();

        }

        public static void InitAdministrateur()
        {
            AddInitAdministrateur();

        }

        #region Clear Database

        private static void CleardDatabase()
        {

        }

        #endregion

        #region Initialisation du referentiel
        /// <summary>
        /// Initialise les pays
        /// </summary>
        private static void AddInitPays()
        {
            using (var context = new ModelContainer())
            {
                var data = new ListePaysObject
                {
                    Libelle = "France"
                };
                context.ListePays.Add(data);
                context.SaveChanges();
            }
        }

        /// <summary>
        /// Initialise les formes juridiques
        /// </summary>
        private static void AddInitFormesJuridiques()
        {
            using (var context = new ModelContainer())
            {
                // Ajout des formes juridiques,
                var data = new FormesJuridiquesObject
                {
                    Libelle = "SARL"
                };

                context.FormesJuridiques.Add(data);
                data = new FormesJuridiquesObject
                {
                    Libelle = "Entreprise individuelle et libéral"
                };
                context.FormesJuridiques.Add(data);

                data = new FormesJuridiquesObject
                {
                    Libelle = "EURL"
                };
                context.FormesJuridiques.Add(data);

                data = new FormesJuridiquesObject
                {
                    Libelle = "SAS"
                };
                context.FormesJuridiques.Add(data);

                data = new FormesJuridiquesObject
                {
                    Libelle = "Autre"
                };
                context.FormesJuridiques.Add(data);

                context.SaveChanges();
            }
        }

        /// <summary>
        /// Initialise les roles
        /// </summary>
        private static void AddInitRoles()
        {
            using (var context = new ModelContainer())
            {
                var data = new RolesObject
                {
                    Libelle = "Administrateur"
                };
                context.Roles.Add(data);
                context.SaveChanges();

                data = new RolesObject
                {
                    Libelle = "Recruteur"
                };
                context.Roles.Add(data);
                context.SaveChanges();

                data = new RolesObject
                {
                    Libelle = "Postulant"
                };
                context.Roles.Add(data);
                context.SaveChanges();
            }
        }

        private static void AddInitEntreprises()
        {
            using (var context = new ModelContainer())
            {
                //Entreprise Client
                // France
                var lePays = (from p in context.ListePays where p.Id == 1 select p).ToList();
                // Entreprise SARL
                var laFormeJuridiqueSARL = (from fj in context.FormesJuridiques where fj.Id == 1 select fj).ToList();
                // Entreprise individuelle
                var laFormeJuridiqueEI = (from fj in context.FormesJuridiques where fj.Id == 2 select fj).ToList();
                // Role recruteur
                var leRoleRecruteur = (from r in context.Roles where r.Id == 2 select r).ToList();
                // Role postulant
                var leRolePostilant = (from r in context.Roles where r.Id == 3 select r).ToList();


                var data = new EntreprisesObject
                {
                    Enseigne = "CICM",
                    AdresseL1 = "36 rue de la Résistance",
                    CodePostal = "64330",
                    Ville = "Portet",
                    RepresentantLegalNom = "GROSS",
                    RepresentantLegalPrenom = "Gabriel",
                    ListePays =  lePays,
                    FormesJuridique = laFormeJuridiqueEI,
                    Roles = leRoleRecruteur

                };
                context.Entreprises.Add(data);

                // Entreprise Recruteur
                data = new EntreprisesObject
                {
                    Enseigne = "Recruteur",
                    AdresseL1 = "1 rue du moulin",
                    CodePostal = "75000",
                    Ville = "Paris",
                    RepresentantLegalNom = "NomRecruteur",
                    RepresentantLegalPrenom = "Prenom recruteur",
                    ListePays = lePays,
                    FormesJuridique = laFormeJuridiqueSARL,
                    Roles = leRolePostilant
                    
                };
                context.Entreprises.Add(data);

                context.SaveChanges();
            }
        }
        #endregion

        #region Initialisation du compte administrateur

        /// <summary>
        /// Initialise l'administrateur
        /// </summary>
        private static void AddInitAdministrateur()
        {
            using (var context = new ModelContainer())
            {
                // France
                var lePays = (from p in context.ListePays where p.Id==1 select p).FirstOrDefault();
                // Admin
                var leroleAdmin = (from r in context.Roles where r.Id == 1 select r).FirstOrDefault();
                // CICM
                var lentreprise = (from e in context.Entreprises where e.Id == 1 select e).FirstOrDefault();

                // Ajout du contact
                var leContact = new ContactsObject
                {
                    Nom = "Dupont",
                    Prenom = "Jean",
                    Adresse1 = "Rue du parc",
                    Ville = "Paris",
                    CodePostal = "75000"

                };
                leContact.ListePays.Add(lePays);
                leContact.Roles.Add(leroleAdmin);
                context.Contacts.Add(leContact);
                leContact.Entreprises.Add(lentreprise);
                context.SaveChanges();

                
            }


        }

        #endregion

    }
}
